--2- Mostrar todos os dados da tabela Musica.
select * from musica

-- ProjeÁ?o----

— Exercício SQL Simples - LETI—
——

— 3A
-3A1- Mostrar todos os dados da tabela CD;
select * from cd;

—3A2- Mostrar o t?tulo e a data de compra de todos os CD;
select titulo,datacompra from cd;

—3A3- Mostrar a data de compra de todos CD;
select datacompra from cd;

-- 3A4- Mostrar o resultado da alInea anterior, mas sem registos repetidos;
select distinct datacompra from cd;

—3A5- Mostrar o codigo dos CD e os respetivos interrpretes;
select  codcd,interprete from musica;

——3A6- Mostrar a data de compra de todos os CD e os respetivos interrpretes, sem registos repetidos;
select distinct codcd,interprete from musica;

—3A7-  Mostrar a data de compra de todos os CD com a coluna  intitulada “Data de Compra”;
select distinct datacompra  “data de Compra” from CD;

—3A8- Mostrar o titulo, o valor pago e o respetivo valor do IVA de todos os CD. 

-- O valor do IVA » calculado de acordo com a seguinte formula: valor do IVA = (valor pago * 0.23/1.23)
select titulo,valorpago,round((valorpago * 0.23)/1.23,2) IVAPAGO from CD;

—3A9- Mostrar todos os dados das musicas do CD com o codigo 2;
select * from musica where codcd=2;

—3A10- Mostrar todos os dados das musicas que nao pertencem ao CD com o c€digo 2;
select * from musica where codcd <> 2;

—3A11- Mostrar todos os dados das musicas do CD com o c€digo 2 cuja duracao seja superior a 5;
select * from musica where codcd=2 and duracao >5;

—3A12 Mostrar todos os dados das musicas do CD com o codigo 2 cuja duraçao pertença ao intervalo [4,6];
select * from musica where codcd=2 and duracao between 4 and 6;

—3A13 Mostrar todos os dados das musicas do CD com o codigo 2 cuja duracao seja inferior a 4 ou superior a 6;
select * from musica where codcd=2 and duracao <4 or duracao >6 ;

—3A14- Mostrar todos os dados das musicas com o n?mero: 1, 3, 5 ou 6;
select * from musica where codcd in (1,3,5,6);

—3A15 -Mostrar todos os dados das musicas com o n?mero diferente de 1, 3, 5 e 6;
select * from musica where codcd not in(1,3,5,6);

—3A16- Mostrar os titulos dos CD comprados na FNAC;
select titulo from CD where local_compra like 'FNAC';

-- 3A17 -Mostrar os titulos dos CD que n?o foram comprados na FNAC.

select titulo from CD where local_compra not like 'FNAC' or local_compra is null;

—3A18 Mostrar todos os dados das musicas cujo interprete » uma orquestra;
select * from musica where interprete like 'Orquestra%';

—3A19 Mostrar todos os dados das musicas cujo nome do int»rprete tem a letra Y;
select * from musica where upper(interprete) like '%Y%';

—3A20- Mostrar todos os dados das musicas cujo titulo » iniciado pela letra B, D ou H;
select * from musica where Upper(titulo) like 'B%' or Upper(titulo) like'D%' or Upper(titulo) like'H%';

—3A21- Mostrar todos os dados dos CD sem o local de compra registado;
select * from CD where local_compra is null;

—3A22 Mostrar todos os dados dos CD com o local de compra registado;
select * from CD where local_compra is not null;

—B- ORDENAÇOES—

—B1 - )Mostrar o titulo e a data de compra   dos CD  por ordem alfabetica do titulo do CD;
select titulo, data_compra  from CD order by 1;

—B2 - Mostrar o titulo e a data de compra   dos CD  por ordem descendente de data de compra do cd;
select titulo, data_compra  from CD order by 2 desc;

—B3- Mostrar o titulo e o local de compra   dos CD  por ordem ascendente do local de compra do CD;
select titulo, local_compra  from CD order by 2 ;

—B4- Mostrar o resultado anterior , mas por ordem ascendente do local de compra do CD;
select titulo, local_compra  from CD order by 2 DESC;

—B5- Mostar o titulo, o valor pago e o respectivo valor do iva dos CD, por ordem decrescente do iva;
select titulo,valor_pago,round((valor_pago * 0.23)/1.23,2) IVAPAGO from CD order by  3 desc;

—B6 -Mostrar o tÌtulo do CD por ordem descendente da data de compra e, no caso da igualdade de datas, por ordem alfabética do titulo.
select titulo,data_compra  from cd order by 2 desc, 1 asc;

-- C Funções de Agregacao---

--1) Mostrar a quantidade de musicas
select count(*) from musica;

--2) Mostrar a quantidade de locais de compra distintos;
select count(distinct local_compra) from cd;

-- 3) Mostrar o total gasto com a compra de todos os CD,
select sum(valor_pago) from CD;

-- 4) Mostrar o  o maior  valor pago por um CD
select Max(valor_pago), from CD;

-- D Group by e Having —

—D1 - Mostrar, para cada CD e respetivos intérpretes, a quantidade de músicas do CD.  

—D2) Mostrar a quantidade de CD comprados por local de compra e o respectivo  local de compra;
select  local_compra, count(*)
from cd
group by local_compra

—D3 Mostrar os locais de compra, cujo média do valor pago por CD È inferior a 10, juntamente com o
--respetivo total do valor pago.
select  local_compra, sum(valor_pago) "Total pago"
from cd
group by local_compra
having avg(valor_pago)>10

—D4 Mostrar o valor total pago nos locais de compra, cuja quantidade de CD comprados È inferior a 2. 
--O local de compra tambem deve ser visualizado;
select  local_compra, sum(valor_pago)
from cd
group by local_compra
having count(*)<2

-- E Seleções em múltiplas tabelas - Junções—

—E5-  Mostrar, o titulo do CD 	e o título das músicas de todos os CD; 
select  c.titulo, m.titulo
from musicas m inner join cd  c on (m.cod_cd=c.cod_cd)
order by 1;

-E6- Mostrar o título do CD e o título da música com o número 1 de cada CD;  select  c.titulo, m.titulo
from musicas m inner join cd  c on (m.cod_cd=c.cod_cd)
where  m.nr_musica=1;
order by 1;

-E7 - Mostrar o número, o título e a duração, de todas as músicas do CD com o título Punkzilla.  
select  m.nr_musica, titulo, m.titulo, m.duracao
from musicas m inner join cd  c on (m.cod_cd=c.cod_cd)
where  c.titulo like “Punkzilla”;

—E8-  Mostrar, para cada CD cujas musicas tÍm uma duracao média superior a 4, o código, o título e a
--quantidade de musicas do CD.
select  c.cod_cd, c.titulo, count(*) Quantidade 
from musicas m inner join cd  c on (m.cod_cd=c.cod_cd)
group by c.cod_cd, c.titulo
having avg(duracao) >4
order by 1;